package com.hqhy.like.admin.account.service;

import com.hqhy.like.admin.account.pojo.param.UserAddNewParam;
import com.hqhy.like.admin.account.pojo.param.UserPwdPhoneUpdateParam;
import com.hqhy.like.admin.account.pojo.param.UserSearchParam;
import com.hqhy.like.admin.account.pojo.param.UserUpdateInfoParam;
import com.hqhy.like.admin.account.pojo.vo.UserListItemVO;
import com.hqhy.like.admin.account.pojo.vo.UserStandardVO;
import com.hqhy.like.common.consts.data.AccountConsts;
import com.hqhy.like.common.pojo.vo.PageData;
import org.springframework.transaction.annotation.Transactional;

/**
 * 处理用户数据的业务接口
 */
@Transactional
public interface IUserService extends AccountConsts {

    /**
     * 添加用户
     *
     * @param userAddNewParam 用户数据
     */
    void addNew(UserAddNewParam userAddNewParam);

    /**
     * 删除用户
     *
     * @param id 用户ID
     */
    void delete(Long id);

    /**
     * 修改用户
     * @param id 用户ID
     * @param userUpdateInfoParam 用户参数
     */
    void updateUserInfo(Long id, UserUpdateInfoParam userUpdateInfoParam);

    /**
     * 修改个人信息
     * @param userPwdPhoneUpdateParam 个人信息参数
     */
    void updateLoginUser(UserPwdPhoneUpdateParam userPwdPhoneUpdateParam);

    /**
     * 修改头像
     *
     * @param userId 用户ID
     * @param avatar 新头像的URL
     */
    void updateAvatar(Long userId, String avatar);

    /**
     * 启用用户
     *
     * @param userId 用户ID
     */
    void setEnable(Long userId);

    /**
     * 禁用用户
     *
     * @param userId 用户ID
     */
    void setDisable(Long userId);

    /**
     * 根据ID查询用户
     *
     * @param userId 用户ID
     * @return 匹配的用户信息
     */
    UserStandardVO getStandardById(Long userId);

    /**
     * 根据用户名查询用户数据详情
     * @param username 用户名
     * @return 匹配的用户数据详情，如果没有匹配的数据，则返回null
     */
    UserStandardVO getStandardByUsername(String username);

    /**
     * 根据电话号码查询用户数据详情
     * @param phone 用户电话号码
     * @return 匹配的用户数据详情，如果没有匹配的数据，则返回null
     */
    UserStandardVO getStandardByPhone(String phone);

    /**
     * 查询用户列表，将使用默认的每页记录数
     *
     * @param pageNum 页码
     * @return 用户列表
     */
    PageData<UserListItemVO> list(Integer pageNum);

    /**
     * 查询用户列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 用户列表
     */
    PageData<UserListItemVO> list(Integer pageNum, Integer pageSize);

    PageData<UserListItemVO> selectUserList(UserSearchParam userSearchParam, Integer pageNum, Integer pageSize);

}